100 microns between slits 40'' slits priorizing QSO, Nright NUV galaxies
%reload_ext autoreload
%autoreload 2
import plotly.graph_objects as go
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, init_notebook_mode, iplot
import plotly.io as pio
import pandas as pd
from astropy.table import Table, vstack, hstack, dstack
import numpy as np
from astroquery.simbad import Simbad
import astropy.coordinates as coord
# import astropy.units as u
# from astroquery.ipac import ned
# from plotly.io import _html
from IPython.display import display, Javascript
pd.options.mode.chained_assignment = None # default='warn'
init_notebook_mode()
display(Javascript("""
window._encodeURI = window._encodeURI || encodeURI;
encodeURI = uri => _encodeURI(uri)
.replace('%2523', '%23') // #
.replace('%253A', '%3A') // :
.replace('%252b', '%2b'); // +
"""))
lambda_lya = 1215.67
theta=0
dispersion = 0.06055576 #mm per angstrom
gx_det = 43.103859739817537
gy_det = 37.712248952642668
threshold = 0.24
slit = 0.1#0.06
center_grating=2060
# vipers = Table.read('VIPERS_photo_spectro_background_qsos.fits')
def InitializeVIPERS():
vipers = Table.read('all_targets_smaller.fits')
vipers['zspec'][vipers['SELECTED']==5]=-99
vipers['zspec'][vipers['SELECTED']==2]=vipers['redshift'][vipers['SELECTED']==2]
vipers['alpha_1'][vipers['SELECTED']==2]=vipers['ra'][vipers['SELECTED']==2]
vipers['delta_1'][vipers['SELECTED']==2]=vipers['dec'][vipers['SELECTED']==2]
vipers['NUV'][vipers['SELECTED']==5]=-1
vipers['NUV'][vipers['SELECTED']==2]=-1
vipers['alpha_1'][vipers['SELECTED']==5]=vipers['ra'][vipers['SELECTED']==5]
vipers['delta_1'][vipers['SELECTED']==5]=vipers['dec'][vipers['SELECTED']==5]
vipers.rename_column('alpha_1','RA')
vipers.rename_column('delta_1','DEC')
vipers['symbol']='xxxxxxxxxxxxx'
vipers['symbol']='circle'
vipers['Type']='Galaxies '
vipers['url_id'] = ["<a href=\'http://simbad.u-strasbg.fr/simbad/sim-id?Ident=%s'>%s</a>" %(u,'·')for u in np.array(vipers['id_IAU_1'],dtype=str)]
vipers['url'] = ["<a href=\'http://simbad.u-strasbg.fr/simbad/sim-coo?Coord=%0.7fd%0.7fd&CooFrame=FK5&CooEpoch=2000&CooEqui=2000&CooDefinedFrames=none&Radius=2&Radius.unit=arcmin'>%s</a>" %(ra,dec,'·')for ra,dec in zip(vipers['RA'],vipers['DEC'])]
vipers['Impact parameter (kpc)']= np.array(vipers['Separation'] * 7.23,dtype=int)
vipers['size']= (-vipers['NUV']+29)**2
vipers['symbol'][vipers['zspec']<0.3]='hexagon'
vipers['symbol'][(vipers['zspec']>0.5) & (vipers['zspec']<0.8)]='circle'
vipers['symbol'][(vipers['zspec']>0.9) & (vipers['zspec']<1.1)]='octagon'
vipers['symbol'][(vipers['zspec']>1.1)]='pentagon'
vipers['Type'][vipers['zspec']<0]='Bright Star'
vipers['Type'][vipers['SELECTED']==2]='QSO'
vipers['Type'][(vipers['zspec']>0.1)&(vipers['zspec']<0.3)]='CIV'
vipers['Type'][(vipers['zspec']>0.5) & (vipers['zspec']<0.8)]='Lya'
vipers['Type'][(vipers['zspec']>0.9) & (vipers['zspec']<1.1)]='OVI'
vipers['Type'][(vipers['zspec']>1.1)]='LyC'
vipers['Line'] = 1215.67
vipers['Line'][(vipers['zspec']>0.1)&(vipers['zspec']<0.3)]=1549
vipers['Line'][(vipers['zspec']>0.5) & (vipers['zspec']<0.8)]= 1215.67
vipers['Line'][(vipers['zspec']>0.9) & (vipers['zspec']<1.1)]=1033
vipers['Line'][(vipers['zspec']>1.1)]=820
vipers['line_coord_sky'] = np.round(vipers['DEC'] + ((vipers['zspec']+1)*vipers['Line']-center_grating)*dispersion/gy_det,2)
vipers = vipers.to_pandas()
return vipers
vipers = InitializeVIPERS()
qso = Table.read('qso.fits')
qso = qso.to_pandas()
all_qso = Table.read('all_qsos.fits')
all_qso = all_qso.to_pandas()
all_qso['line_coord_sky'] = all_qso['dec'] + ((all_qso['redshift']+1)* 1215.67-center_grating)*dispersion/gy_det
all_qso['symbol']='square'
stars = Table.read('dStars_m1_5deg.fits')
stars = stars[(stars['g']<13) & (stars['r']<13)]
stars['url'] = ["<a href=\'http://simbad.u-strasbg.fr/simbad/sim-coo?Coord=%0.7fd%0.7fd&CooFrame=FK5&CooEpoch=2000&CooEqui=2000&CooDefinedFrames=none&Radius=2&Radius.unit=arcmin'>%s</a>" %(ra,dec,'·')for ra,dec in zip(stars['ra'],stars['dec'])]
stars['symbol']='diamond-x-open'
stars = stars.to_pandas()
# table = add_columns(vipers,alpha_centre = alpha_centre,delta_centre = delta_centre,center_grating=center_grating, theta=theta)
def closeness10(pos,note,threshold=0.24):
s = np.argsort(note)[::-1]
select = np.zeros(note.shape, dtype=bool)
select[s[0]]=True
select[s[1]]=True
for i in s[2:]:
if (min(abs(pos[i]-pos[select]))>threshold) & (min(abs(pos[i]-pos[s[0:2]]))>2 *threshold):
select[i]=True
print('il reste', len(pos[select]),' galaxies sur', len(select), 'et la note moyenne est de:', np.sum(note[select])/len(note[select]))
return select
# def room_left(select,catalog,threshold = 0.24):
# cat = catalog[select]
# pos = cat['x_mask']
# s = argsort(pos)
# index = np.where(pos[s][1:]-pos[s][:-1]>2*threshold)[0]
# len(cat[index])
# return [pos[s][1:][index],pos[s][:-1][index]]
def plot_det_shape(fig,alpha_centre,delta_centre,title='',sky=True):
if not sky:
alpha_centre,delta_centre = 0,0
plate_scale=3600/0.085/1000
x,y = 'X (mm)','Y(mm)'
else:
plate_scale=1
x,y = 'RA','DEC'
r=0.4
if sky:
fig.add_shape(type="rect",
x0=alpha_centre-0.3*plate_scale, y0=delta_centre-0.15*plate_scale, x1=alpha_centre+0.3*plate_scale, y1=delta_centre+0.15*plate_scale,
line=dict(color="black"))
fig.add_shape(type="rect",
x0=alpha_centre-0.15*plate_scale, y0=delta_centre-0.3*plate_scale, x1=alpha_centre+0.15*plate_scale, y1=delta_centre+0,
line=dict(color="black",dash="dot"),)#RoyalBlue
else:
fig.add_shape(type="rect",
x0=-13, y0=-6.56, x1=13, y1=-6.56+13,
line=dict(color="black"))
fig.add_shape(type="rect",
x0=-(13.52/2), y0=-15, x1=(13.52/2), y1=-15+16.64,
line=dict(color="black",dash="dot"),)#RoyalBlue
fig.add_shape(type="circle",
xref="x", yref="y",
x0=alpha_centre-r*plate_scale, y0=delta_centre-r*plate_scale, x1=alpha_centre+r*plate_scale, y1=delta_centre+r*plate_scale,
line_color="black",)
layout = go.Layout(
xaxis=dict(range=[alpha_centre-r*plate_scale,alpha_centre+r*plate_scale],showgrid=False ),
yaxis=dict(range=[delta_centre-r*plate_scale,delta_centre+r*plate_scale],showgrid=False ),
height = 1200,
width = 1200,
title=title,
xaxis_title=x,#r"$\alpha$",
yaxis_title=y,#r"$\delta$",
legend_title="Legend",
paper_bgcolor='rgba(0,0,0,0)',
plot_bgcolor='rgba(0,0,0,0)',
xaxis2=dict(domain=[0.3, 0.7],anchor='y2'),
yaxis2=dict(domain=[0.75, 0.9],anchor='x2'))
fig.update_yaxes(scaleanchor = "x",scaleratio = 1,)
fig.update_layout(layout)
return fig
def Create_label(cat,L):
if L is not None:
text = [l + ' = ' + cat[l].astype(str) + '<br>' for l in L]
return np.sum(text,axis=0)
else:
return None
def ScatterPlot( cat,fig=None,x='X_pix',y='y_pix', marker_symbol='circle',L=['Internal-count','z','FUV_APP','NUV_APP'],err=20/3600,url='url',size='NUV',color='NUV',name='',add_line=False,center=None,threshold=20/3600,note='note',cut=False,slits=False,sky=True,**kwargs):
# cat = cat.to_pandas()
if not sky:
alpha_centre,delta_centre = 0,0
plate_scale=3600/0.085/1000
plate_scale_det=3600/0.085/1000
line_coord ='line_coord_mask'
else:
plate_scale=1
plate_scale_det=3600/0.085/1000
line_coord = 'line_coord_sky'
cat['ok']=True
if url is None:#·
cat['url'] = ["<a href=\'http://simbad.u-strasbg.fr/simbad/sim-coo?Coord=%0.7fd%0.7fd&CooFrame=FK5&CooEpoch=2000&CooEqui=2000&CooDefinedFrames=none&Radius=2&Radius.unit=arcmin'>%s</a>" %(ra,dec,'-')for ra,dec in zip(cat[x],cat[y])]
url='url'
if fig==None:
fig=go.Figure()
if add_line:
cat['ok']=False
cat = cat.sort_values(x)
if sky:
mask = ((cat[line_coord]<center[1]+0.15) & (cat[line_coord]>center[1]-0.15) & (cat[x]<center[0]+0.3) & (cat[x]>center[0]-0.3))| (cat[note]>=100)
else:
# cat['line_coord_mask'] = np.round(cat[y] + ((cat['zspec']+1)*cat['Line']-center_grating)*dispersion/gy_det,2)
# mask = cat['line_coord_sky']>-1000
mask = ((cat[line_coord]<6.5) & (cat[line_coord]>-6.5) )| (cat[note]>=100)#& (cat[x]<center[0]+0.3) & (cat[x]>center[0]-0.3))| (cat[note]>=100)
mask2 = closeness10(np.array(cat[x]), np.array(cat[note]),threshold=threshold)
cat['ok'][mask] = mask2
cat['space left']= 0 #* np.array(cat[x],dtype=int)
cat['space right']=int(0)
cat['space left'][cat['ok']] = [0]+list(3600*(np.array(cat[x][cat['ok']][1:]) -np.array(cat[x][cat['ok']][:-1])))
cat['space right'][cat['ok']] = list(3600*(np.array(cat[x][cat['ok']][:-1]) -np.array(cat[x][cat['ok']][1:])))+[0]
cat['space left'] = np.array(cat['space left'],dtype=int)
cat['space right'] = np.array(cat['space right'],dtype=int)
if cut:
cat['symbol'][~cat['ok']]=cat['symbol'][~cat['ok']].astype(str)+'-open'
# cat['symbol'][cat['ok'] & mask2]=cat['symbol'][cat['ok'] & mask2].astype(str)+'-dot'
text = Create_label(cat,L)[cat['ok']]
# print(cat[~cat['selected']])
if slits:
# for ac,dc in zip(cat[cat['ok']][x],cat[cat['ok']][y]):
for i,gal in cat[cat['ok']].iterrows():
# print(gal)
ac,dc = gal[x], gal[y]+gal['delta_y']*plate_scale
# length = gal['length']*plate_scale
width = gal['width']*plate_scale
fig.add_shape(type="rect",x0=ac-gal['length_left']*plate_scale, y0=dc-width/2, x1=ac+gal['length_right']*plate_scale, y1=dc+width/2,line=dict(color="black",width=0.5),)#RoyalBlue
#print(ac-gal['length_left']*plate_scale, dc-width/2, ac+gal['length_right']*plate_scale, dc+width/2)
fig.add_shape(type="rect",x0=ac-gal['length_left']*plate_scale, y0=center[1]-0.18-width/2, x1=ac+gal['length_right']*plate_scale, y1=center[1]-0.18+width/2,line=dict(color="black",width=0.5),)#,hovertext = Create_label(cat[cat['ok']],['space left','space right']),
lya=go.Scatter(x=cat[x][cat['ok']],
y=cat[line_coord][cat['ok']],
mode='markers',
error_y=dict(type='data',array=0.05*np.ones((len(cat[cat['ok']]))),thickness=1,width=0),#,thickness=50,width=1#0.120
marker_symbol='diamond-wide',#hovertemplate = '%{text}<extra></extra>',
marker=dict(color='black'),name='Emission line',hovertext = text,**kwargs)#,hoverinfo='skip')
fig.add_trace(lya)
else:
mask=None
text = Create_label(cat,L)
if type(size) is str:
size=cat[size]
if color is None:
colorscale=None
colorbar=None
showscale=False
else:
colorscale="gray"#"Cividis"#"gray"#'viridis'#
colorbar = dict(title=color,len=0.6)
color = cat[color][cat['ok']]
showscale=True
# colorscale=None if color is None else 'viridis'
# color=None if color is None else 'viridis'
#cat['ok']=True
trace=go.Scatter(x=cat[x][cat['ok']],
y=cat[y][cat['ok']],
# error_x=dict(type='data',array=err*np.ones((len(cat)))),#,thickness=50,width=1#0.120
mode='markers+text',
marker_symbol=cat['symbol'][cat['ok']],#hovertemplate = '%{text}<extra></extra>',
textfont=dict(
family="sans serif",
size=18,
color="black",colorsrc='black'),#textposition="bottom center",
marker=dict(
size=size,
color=color,
colorscale=colorscale,cmax=25,cmin=22,
showscale=showscale,colorbar=colorbar),text=cat[url][cat['ok']],
hovertext = text,name=name,**kwargs)
fig.add_trace(trace)
return fig, trace, cat['ok']
mag_NUV_max = 24
stars['.']='black'
stars['size']=13
qso['size']=23
qso['symbol']='square'
qso['.']='black'
all_qso['size']=23
all_qso['symbol']='square'
all_qso['.']='black'
stars['symbol']='diamond-x-open'
alpha_centre = 32.176
alpha_centre = 32.236
alpha_centre = 32.22
delta_centre = -5.73
delta_centre = -5.75
#redshift_query = '(SELECTED>0|(zspec>0.636 & zspec<0.6838)| (zspec>0.69613 & zspec<0.751)|(zspec>1.2 & zspec<1.45)|(zspec>0.9 & zspec<1.1)|(zspec>0.1 & zspec<0.3))'
redshift_query = '((zspec>0.636 & zspec<0.6838)| (zspec>0.69613 & zspec<0.751)|(zspec>1.2 & zspec<1.45)|(zspec>0.9 & zspec<1.1)|(zspec>0.1 & zspec<0.3))'
subvipers = vipers.query(redshift_query+' & RA>%0.2f & RA<%0.2f & DEC>%0.2f & DEC<%0.2f & ((NUV>0 & NUV<%0.1f))'%(alpha_centre-0.33,alpha_centre+0.33,delta_centre-0.15,delta_centre+0.15,mag_NUV_max))
substars = stars.query('ra>%0.2f & ra<%0.2f & dec>%0.2f & dec<%0.2f'%(alpha_centre-0.3,alpha_centre+0.3,delta_centre-0.3,delta_centre+0.15))
fig, trace1, mask = ScatterPlot(subvipers,x='RA',y='DEC',L=['Type','id_IAU_1','zspec','NUV'],url='url',name='Galaxies',add_line=False,center=[alpha_centre,delta_centre],note='NUV',threshold=40/3600,cut=True)#,size=10,color=None)
fig, trace1, _ = ScatterPlot(vipers.query( redshift_query +' & (SELECTED>0) & Separation<155'),fig=fig,x='RA',y='DEC',L=['Type','id_IAU_1','zspec','NUV','Impact parameter (kpc)','SELECTED'],url='url',size=10,color=None,name='Absorption Galaxies',add_line=False,center=[alpha_centre,delta_centre],note='NUV',threshold=40/3600)
fig, trace1, _ = ScatterPlot(vipers.query( redshift_query +' & (SELECTED>0) & Separation<155'),fig=fig,x='ra',y='dec',L=['MAIN_ID','redshift','FLUX_u_2a','SELECTED'],url='url',size=10,color=None,name='Background QSO',add_line=False,center=[alpha_centre,delta_centre],note='NUV',threshold=40/3600)
fig, trace2, _ = ScatterPlot(substars,fig=fig,x='ra',y='dec',L=['r','g'],url='url',size='size',color='.',name='Guiding stars',center=[alpha_centre,delta_centre])
fig, trace3, _ = ScatterPlot(qso,fig=fig,x='ra',y='dec',L=['FLUX_u','redshift'],url=None,size='size',color='.',name='QSOs',center=[alpha_centre,delta_centre])
#fig.add_trace(go.Histogram(x=subvipers[mask]['NUV'],xaxis='x2',yaxis='y2', marker_color='black',opacity=0.5,name='NUV (detector: %i)'%(len(subvipers[mask]))))
#fig.add_trace(go.Histogram(x=subvipers['NUV'],xaxis='x2',yaxis='y2', marker_color='grey',opacity=0.5,name='NUV (All: %i)'%(len(subvipers))))
fig.update_layout(barmode='stack')
fig=plot_det_shape(fig,alpha_centre,delta_centre,title='')
fig.write_html('VIPERS.html')
iplot(fig)
vipers['Note']=0
mag_NUV_max=24.5
# alpha_centre = 32.176
# alpha_centre = 32.236
alpha_centre = 32.22
# delta_centre = -5.73
delta_centre = -5.75
star_query = '(r<13 & g<13) & (SELECTED==5)'
qso_query = '(SELECTED==2)'
gal_near_qso_query = '(SELECTED==4 & Separation<55)'
redshift_query = '(SELECTED>0|(zspec>0.636 & zspec<0.6838)| (zspec>0.69613 & zspec<0.751)|(zspec>1.2 & zspec<1.45)|(zspec>0.9 & zspec<1.1)|(zspec>0.1 & zspec<0.3))'
bckd_qso_query = redshift_query +'&( SELECTED==0 & Separation<55)'
field_query = '(RA>%0.2f & RA<%0.2f & DEC>%0.2f & DEC<%0.2f) &' %(alpha_centre-0.3,alpha_centre+0.3,delta_centre-0.15,delta_centre+0.15)
regular_gal = ' (Note>10 |((NUV>0 & NUV<%0.1f) & %s))'%(mag_NUV_max,redshift_query)
vipers['symbol'][vipers.eval(star_query)]='diamond-x'
vipers['symbol'][vipers.eval(qso_query)]='square'
vipers['symbol'][vipers.eval(gal_near_qso_query)]='diamond'
vipers['symbol'][vipers.eval(bckd_qso_query)]='square-x'
# vipers['symbol']='circle'
vipers['color']='black'
vipers['color'][vipers.eval(star_query)]='green'
vipers['color'][vipers.eval(qso_query)]='blue'
vipers['color'][vipers.eval(gal_near_qso_query)]='orange'
vipers['color'][vipers.eval(bckd_qso_query)]='red'
# subvipers = vipers.query(redshift_query+' & RA>%0.2f & RA<%0.2f & DEC>%0.2f & DEC<%0.2f & ((NUV>0 & NUV<%0.1f)|(NUV==-1))'%(alpha_centre-0.33,alpha_centre+0.33,delta_centre-0.15,delta_centre+0.15,mag_NUV_max))
#np.unique(subvipers.SELECTED)
def CreateNote(cat):
cat['Note']=0
# cat['NUV'][cat.eval('NUV==-99')]=99
# cat['Note'] -= cat['NUV']/10
cat['Note'][cat.eval('NUV>0 & NUV<%s'%(mag_NUV_max))] = 1+(mag_NUV_max-vipers['NUV'][cat.eval('NUV>0 & NUV<%s'%(mag_NUV_max))])/mag_NUV_max
cat['Note'][cat.eval('SELECTED==4 & Separation<60')]=1e5
cat['Note'][cat.eval(qso_query)] = 10
cat['Note'][cat.eval(star_query + '& DEC>-5.75 & RA>32.06 & RA<32.3')] = 1e2#32.07
#cat['Note'][cat.eval("num_2 == b'103181554'")] = 1e3
cat['Note'][cat.eval("num_2 == b'103180263'")] = 1e3
cat['Note'][cat.eval("num_2 == b'103218492'")] = 1e6
cat['Note'][cat.eval("num_2 == b'103193661'")] = 1e3
cat['Note'][cat.eval("num_2 == b'103195359'")] = 1e5
cat['Note'][cat.eval("num_2 == b'103217836'")] = 1e5 #bright gal
cat['Note'][cat.eval("num_2 == b'103207532'")] = 1e6 #bright gal
cat['Note'][cat.eval("num_2 == b'103210404'")] = 1e5 #bright gal
cat['Note'][cat.eval("num_2 == b'103205780'")] = 1e6 #bright gal
cat['Note'][cat.eval("num_2 == b'102189833'")] = 1e5 #bright gal
cat['Note'][cat.eval("num_2 == b'102176019'")] = 1e5 #bright gal
cat['Note'][cat.eval("num_2 == b'102183098'")] = 0 #bright gal
cat['Note'][cat.eval("num_2 == b'103186237'")] = 1e5 #bright gal
cat['Note'][cat.eval("num_2 == b'103200737'")] = 1e5 #bright gal
#cat['Note'][cat.eval("num_2 == b'102161806'")] = 1e3#bright and elongated? z=0.93 not ok I guess
#cat['Note'][cat.eval("num_2 == b'102138186'")] = 1e3# close to 102137899
#cat['Note'][cat.eval("num_2 == b'103153716'")] = 1e3#on the bototm very bright
# stars haute
# qso all
# bqckground qso sauf
return cat
def ChangeSlitDimensions(cat):
cat['width'] = 6/3600
cat['delta_y'] = 0
cat['length_right'] = 35/3600/2
cat['length_left'] = 35/3600/2
cat['length_right'][cat.eval("num_2 == b'103163381'")] = 55/3600
cat['width'][cat.eval("num_2 == b'103219293'")] = 0
cat['length_left'][cat.eval("num_2 == b'103219293'")] = 0
cat['length_right'][cat.eval("num_2 == b'103219293'")] = 0
cat['length_right'][cat.eval("num_2 == b'103219161'")] = 60/3600
cat['width'][cat.eval("SELECTED==5")] = 20/3600
cat['length_right'][cat.eval("SELECTED==5")] = 40/3600/2
cat['length_left'][cat.eval("SELECTED==5")] = 40/3600/2
cat['width'][cat.eval("num_2 == b'103181519'")] = 8/3600 #qso + ga;axy in same slit
cat['delta_y'][cat.eval("num_2 == b'103181519'")] = -0.001
cat['width'][cat.eval("num_2 == b'103195359'")] = 10/3600 #qso + ga;axy in same slit
cat['length_right'][cat.eval("num_2 == b'103195359'")] = 40/3600
cat['delta_y'][cat.eval("num_2 == b'103195359'")] = +0.003
cat['width'][cat.eval("num_2 == b'102176347'")] = 10/3600 #qso + ga;axy in same slit
cat['length_right'][cat.eval("num_2 == b'102176347'")] = 20/3600
cat['length_left'][cat.eval("num_2 == b'102176347'")] = 35/3600
cat['delta_y'][cat.eval("num_2 == b'102176347'")] = +0.003
cat['length_left'][cat.eval(field_query+qso_query)] =30/3600
cat['length_left'][cat.eval("num_2 == b'103193758'")] = 10/3600
#stars bigger slit
#verify that slits are not interfering
return cat
vipers = CreateNote(vipers)
vipers = ChangeSlitDimensions(vipers)
subvipers = vipers.query('%s (%s | %s | %s | %s | %s)'%(field_query,regular_gal,qso_query,bckd_qso_query,star_query,gal_near_qso_query),engine='python')
title="""F1 - vipers Modified: <br>
-3 Guide stars + 3 Calibration stars <br>
-2 Lya bright QSOs (u<19.5) <br>
-4 background QSOs (z~2.4, u~20.5) with nearby galaxies <br>
-10 gal NUV<23.2
"""
fig, trace1, mask = ScatterPlot(vipers.query(field_query+regular_gal + '&'+redshift_query),x='RA',y='DEC',L=['Type','id_IAU_1','zspec','NUV','Note'],url=None,name='Galaxies',add_line=True,center=[alpha_centre,delta_centre],note='NUV',threshold=20/3600,cut=True,size=0)
fig, trace1, _ = ScatterPlot(vipers.query('SELECTED==4'),fig=fig,x='ra',y='dec',L=['MAIN_ID','redshift','FLUX_u_2a','Note'],url=None,size=10,color=None,name='Background QSO',add_line=False,center=[alpha_centre,delta_centre],note='NUV',threshold=40/3600)
fig, trace2, _ = ScatterPlot(vipers.query(field_query+star_query),fig=fig,x='ra',y='dec',L=['r','g','Note'],url=None,size=10,color=None,name='Guiding stars',center=[alpha_centre,delta_centre])
fig, trace3, _ = ScatterPlot(vipers.query(field_query+qso_query),fig=fig,x='ra',y='dec',L=['FLUX_u_2a','redshift','Note'],url=None,size=10,color=None,name='QSOs',center=[alpha_centre,delta_centre])
fig, trace1, _ = ScatterPlot(vipers.query(field_query+gal_near_qso_query),fig=fig,x='RA',y='DEC',L=['Type','id_IAU_1','zspec','NUV','Impact parameter (kpc)','Note'],url=None,size=10,color=None,name='Absorption Galaxies',add_line=False,center=[alpha_centre,delta_centre],note='NUV',threshold=20/3600)
fig, trace1, mask = ScatterPlot(subvipers.query('Note>0'),x='RA',y='DEC',fig=fig,L=['Type','id_IAU_1','zspec','NUV','space left','space right','Note'],url=None,name='Target',add_line=True,center=[alpha_centre,delta_centre],note='Note',threshold=35/3600,cut=True,size=0,slits=True,line=dict(width=0), visible = "legendonly")
# fig, trace1, mask = ScatterPlot(subvipers.query('Note>100'),x='RA',y='DEC',fig=fig,L=None,url='url',name='Target',add_line=True,center=[alpha_centre,delta_centre],note='Note',threshold=30/3600,cut=False,size=10)
fig.add_trace(go.Histogram(x=subvipers.query('Note>0')[mask]['NUV'],xaxis='x2',yaxis='y2', marker_color='black',opacity=0.5,name='NUV (detector: %i)'%(len(subvipers.query('Note>0')[mask])),xbins=dict(start=21,end=24,size=0.2)))
# fig.add_trace(go.Histogram(x=subvipers['NUV'],xaxis='x2',yaxis='y2', marker_color='grey',opacity=0.5,name='NUV (All: %i)'%(len(subvipers))))
fig.update_layout(barmode='stack')
fig=plot_det_shape(fig,alpha_centre,delta_centre,title=title)
fig.write_html('VIPERS.html')
iplot(fig)
il reste 51 galaxies sur 114 et la note moyenne est de: 16.732589422487745 il reste 31 galaxies sur 90 et la note moyenne est de: 125881.6923171974
/var/folders/m8/f6l41h_51qxdzrz8p1xqr3f80000gp/T/ipykernel_91913/822236225.py:101: UserWarning: Boolean Series key will be reindexed to match DataFrame index.
fig, trace1, mask = ScatterPlot(subvipers.query('Note>0'),x='RA',y='DEC',L=['Type','id_IAU_1','zspec','NUV','space left','space right','Note'],url=None,name='Target',add_line=True,center=[alpha_centre,delta_centre],note='Note',threshold=35/3600,cut=True,size=0,slits=True,line=dict(width=0), visible = "legendonly")#,hoverinfo='skip')#,color='color')
# fig, trace1, mask = ScatterPlot(subvipers.query('Note>100'),x='RA',y='DEC',fig=fig,L=None,url='url',name='Target',add_line=True,center=[alpha_centre,delta_centre],note='Note',threshold=30/3600,cut=False,size=10)
fig, trace2, _ = ScatterPlot(substars,fig=fig,x='ra',y='dec',L=['r','g'],url='url',size='size',color='.',name='Guiding stars',center=[alpha_centre,delta_centre])
fig.add_trace(go.Histogram(x=subvipers.query('Note>0')[mask]['NUV'],xaxis='x2',yaxis='y2', marker_color='black',opacity=0.5,name='NUV (detector: %i)'%(len(subvipers.query('Note>0')[mask])),xbins=dict(start=21,end=24,size=0.2)))
# fig.add_trace(go.Histogram(x=subvipers['NUV'],xaxis='x2',yaxis='y2', marker_color='grey',opacity=0.5,name='NUV (All: %i)'%(len(subvipers))))
fig.update_layout(barmode='stack')
fig=plot_det_shape(fig,alpha_centre,delta_centre,title=title)
fig.write_html('VIPERS.html')
iplot(fig)
il reste 31 galaxies sur 90 et la note moyenne est de: 125881.6923171974
/var/folders/m8/f6l41h_51qxdzrz8p1xqr3f80000gp/T/ipykernel_17233/3119395555.py:5: UserWarning: Boolean Series key will be reindexed to match DataFrame index.
from astropy import wcs
w = wcs.WCS(naxis=2)
w.wcs.crpix = [1, 1]
w.wcs.crval = [alpha_centre, delta_centre]
w.wcs.cdelt = np.array([-0.0235, 0.0235])
w.wcs.ctype = ["RA---TAN", "DEC--TAN"]
def convertTOmm(MX,MY,w):
N = len(MX)
gno = np.zeros([N,2])
for i in range(N):
# print(MX)
gno[i,0]=MX[i]
gno[i,1]=MY[i]
xymm = w.wcs_world2pix(gno, 0)
MXmm = []
MYmm = []
MXmm = -xymm[:,0]
MYmm = xymm[:,1]
return MXmm,MYmm
####################################
### Mask - correct for curved plate scale ###
def correctFORplatescale(MX,MY):
X=MX
Y=MY
# if we adopt plate scale from projection above
# which is 0.0235 --> 42.5532 mm/deg = 11.8203 um/"
# we need to divide out the assumed plate scale
ps0=11.8203
radius=np.sqrt((X**2)+(Y**2))
psnew=-1.7584761e-4*radius**2-(6.0880439e-06*radius)+1.1739247e01
return psnew*X/ps0,psnew*Y/ps0
subvipers['x_mask_Julia'], subvipers['y_mask_Julia'] = correctFORplatescale(*convertTOmm(np.array(subvipers['RA']),np.array(subvipers['DEC']),w))
subvipers['line_coord_mask'] = np.round(subvipers['y_mask_Julia'] + ((subvipers['zspec']+1)*subvipers['Line']-center_grating)*dispersion,2)
fig, trace1, _ = ScatterPlot(subvipers.query('Note>0')[mask],x='x_mask_Julia',y='y_mask_Julia',L=['Type','id_IAU_1','zspec','NUV','Note'],url=None,name='Target',add_line=True,center=[alpha_centre,delta_centre],note='Note',threshold=0,cut=True,size=0,slits=True,line=dict(width=0),sky=False)#, visible = "legendonly")
fig.update_layout(barmode='stack')
fig=plot_det_shape(fig,alpha_centre,delta_centre,title=title,sky=False)
fig.write_html('VIPERS.html')
iplot(fig)
/var/folders/m8/f6l41h_51qxdzrz8p1xqr3f80000gp/T/ipykernel_91913/3283410157.py:1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.
il reste 30 galaxies sur 30 et la note moyenne est de: 130077.71351943811
print(subvipers.query('Note>0')[mask][['Type','RA','DEC','zspec','ra','dec','id_IAU_1','zspec','NUV','Note','MAIN_ID','redshift','FLUX_u_2a','Impact parameter (kpc)','SELECTED']].to_string())
subvipers.query('Note>0')[mask].to_csv('selected_targets.csv')
Type RA DEC zspec ra dec id_IAU_1 zspec NUV Note MAIN_ID redshift FLUX_u_2a Impact parameter (kpc) SELECTED 24578 OVI 31.974111 -5.877338 0.9886 NaN NaN b'VIPERS 102138701' 0.9886 22.732000 1.052833 NaN NaN NaN -9223372036854775808 0 24762 Lya 31.953844 -5.798012 0.6554 NaN NaN b'VIPERS 102153884' 0.6554 22.941000 1.044125 NaN NaN NaN -9223372036854775808 0 25285 Lya 31.989041 -5.685817 0.6448 NaN NaN b'VIPERS 102177620' 0.6448 23.027000 1.040542 NaN NaN NaN -9223372036854775808 0 25600 Lya 31.930955 -5.626884 0.6560 NaN NaN b'VIPERS 102189833' 0.6560 23.318001 100000.000000 NaN NaN NaN -9223372036854775808 0 26474 Lya 32.258606 -5.784985 0.6442 NaN NaN b'VIPERS 103180263' 0.6442 -99.000000 1000.000000 NaN NaN NaN -9223372036854775808 0 26558 OVI 32.150259 -5.758623 0.9099 NaN NaN b'VIPERS 103186237' 0.9099 -99.000000 100000.000000 NaN NaN NaN -9223372036854775808 0 26647 Lya 32.469175 -5.739600 0.6497 NaN NaN b'VIPERS 103190971' 0.6497 22.888000 1.046333 NaN NaN NaN -9223372036854775808 0 26692 Lya 32.435912 -5.728239 0.6668 NaN NaN b'VIPERS 103193661' 0.6668 23.495001 1000.000000 NaN NaN NaN -9223372036854775808 0 26729 Lya 32.185309 -5.717904 0.6421 NaN NaN b'VIPERS 103196115' 0.6421 23.240999 1.031625 NaN NaN NaN -9223372036854775808 0 26815 Lya 32.216650 -5.697886 0.6379 NaN NaN b'VIPERS 103200737' 0.6379 24.073000 100000.000000 NaN NaN NaN -9223372036854775808 0 26847 Lya 32.162534 -5.691429 0.6430 NaN NaN b'VIPERS 103202362' 0.6430 23.138000 1.035917 NaN NaN NaN -9223372036854775808 0 26917 Lya 32.124050 -5.676678 0.6432 NaN NaN b'VIPERS 103205780' 0.6432 24.181000 1000000.000000 NaN NaN NaN -9223372036854775808 0 26954 Lya 32.195741 -5.669289 0.6420 NaN NaN b'VIPERS 103207532' 0.6420 23.355000 1000000.000000 NaN NaN NaN -9223372036854775808 0 27117 Lya 32.336883 -5.628133 0.6629 NaN NaN b'VIPERS 103217836' 0.6629 23.336000 100000.000000 NaN NaN NaN -9223372036854775808 0 27130 Lya 32.505728 -5.625209 0.6431 NaN NaN b'VIPERS 103218492' 0.6431 22.348000 1000000.000000 NaN NaN NaN -9223372036854775808 0 27140 OVI 32.309961 -5.622017 0.9368 NaN NaN b'VIPERS 103219161' 0.9368 23.830000 1.007083 NaN NaN NaN -9223372036854775808 0 27146 Lya 32.320784 -5.621506 0.6563 NaN NaN b'VIPERS 103219293' 0.6563 23.382999 1.025708 NaN NaN NaN -9223372036854775808 0 27167 Lya 32.420143 -5.615375 0.6644 NaN NaN b'VIPERS 103220463' 0.6644 22.695999 1.054333 NaN NaN NaN -9223372036854775808 0 27196 Lya 32.388121 -5.609652 0.6432 NaN NaN b'VIPERS 103221874' 0.6432 23.363001 1.026542 NaN NaN NaN -9223372036854775808 0 59453 Lya 32.368900 -5.728103 0.6290 32.355881 -5.717282 b'VIPERS 103193758' 0.6290 23.027000 1.040542 b'SDSS J020925.41-054302.2' 2.3700 22.417999 439 4 59457 Lya 32.352887 -5.720466 0.6592 32.355881 -5.717282 b'VIPERS 103195359' 0.6592 -99.000000 100000.000000 b'SDSS J020925.41-054302.2' 2.3700 22.417999 113 4 59570 Lya 32.402062 -5.778129 0.6566 32.403310 -5.779836 b'VIPERS 103181519' 0.6566 24.639000 100000.000000 b'SDSS J020936.79-054647.4' 2.3330 22.598000 54 4 59619 Lya 32.483237 -5.857544 0.7647 32.497808 -5.857136 b'VIPERS 103163381' 0.7647 -99.000000 100000.000000 b'SDSS J020959.47-055125.7' 2.5165 22.344000 377 4 59971 Lya 32.000532 -5.693551 0.6414 32.017403 -5.687933 b'VIPERS 102176019' 0.6414 23.635000 100000.000000 b'SDSS J020804.17-054116.5' 2.4180 20.534000 460 4 59972 Lya 32.020271 -5.691950 0.7702 32.017403 -5.687933 b'VIPERS 102176347' 0.7702 23.573000 100000.000000 b'SDSS J020804.17-054116.5' 2.4180 20.534000 128 4 60370 Lya 32.040139 -5.644209 0.6421 32.040139 -5.644209 NaN 0.6421 -1.000000 10.000000 b'GALEX 2674093677029101984' 0.6421 NaN -9223372036854775808 2 60378 Lya 32.454515 -5.806811 0.7380 32.454515 -5.806811 NaN 0.7380 -1.000000 10.000000 b'SDSS J020949.08-054824.5' 0.7380 NaN -9223372036854775808 2 60583 Bright Star 32.287522 -5.695231 -99.0000 32.287522 -5.695231 NaN -99.0000 -1.000000 100.000000 NaN NaN NaN -9223372036854775808 5 60773 Bright Star 32.065028 -5.603095 -99.0000 32.065028 -5.603095 NaN -99.0000 -1.000000 100.000000 NaN NaN NaN -9223372036854775808 5 60774 Bright Star 32.083434 -5.691844 -99.0000 32.083434 -5.691844 NaN -99.0000 -1.000000 100.000000 NaN NaN NaN -9223372036854775808 5
/var/folders/m8/f6l41h_51qxdzrz8p1xqr3f80000gp/T/ipykernel_91913/3167338664.py:1: UserWarning: Boolean Series key will be reindexed to match DataFrame index. /var/folders/m8/f6l41h_51qxdzrz8p1xqr3f80000gp/T/ipykernel_91913/3167338664.py:2: UserWarning: Boolean Series key will be reindexed to match DataFrame index.
# alpha_centre = 31.6
# delta_centre = -5.68
# subvipers = vipers.query('((zspec>0.636 & zspec<0.6838)| (zspec>0.69613 & zspec<0.751)|(zspec>1.25 & zspec<1.45)|(zspec>0.95 & zspec<1.05)|(zspec>0.15 & zspec<0.25)) & RA>%0.2f & RA<%0.2f & DEC>%0.2f & DEC<%0.2f & NUV>0 & NUV<%0.1f'%(alpha_centre-0.33,alpha_centre+0.33,delta_centre-0.15,delta_centre+0.15,mag_NUV_max))
# substars = stars.query('ra>%0.2f & ra<%0.2f & dec>%0.2f & dec<%0.2f'%(alpha_centre-0.3,alpha_centre+0.3,delta_centre-0.3,delta_centre+0.15))
# fig, trace1, mask = ScatterPlot(subvipers,x='RA',y='DEC',L=['Type','id_IAU_1','zspec','FUV','NUV','line_coord_sky'],url='url',size='size',name='Galaxies',add_line=True,center=[alpha_centre,delta_centre])
# fig, trace2, _ = ScatterPlot(substars,fig=fig,x='ra',y='dec',L=['r','g'],url='url',size='size',color='.',name='Guiding stars',center=[alpha_centre,delta_centre])
# fig, trace3, _ = ScatterPlot(qso,fig=fig,x='ra',y='dec',L=['FLUX_u'],url=None,size='size',color='.',name='QSOs',center=[alpha_centre,delta_centre])
# fig.add_trace(go.Histogram(x=subvipers[mask]['NUV'],xaxis='x2',yaxis='y2', marker_color='black',opacity=0.5,name='NUV (detector: %i)'%(len(subvipers[mask]))))
# fig.add_trace(go.Histogram(x=subvipers['NUV'],xaxis='x2',yaxis='y2', marker_color='grey',opacity=0.5,name='NUV (All: %i)'%(len(subvipers))))
# fig.update_layout(barmode='stack')
# iplot(plot_det_shape(fig,alpha_centre,delta_centre,title="F1 - vipers : shifted"))
# alpha_centre = 31.6
# delta_centre = -5.25
# subvipers = vipers.query('((zspec>0.636 & zspec<0.6838)| (zspec>0.69613 & zspec<0.751)|(zspec>1.25 & zspec<1.45)|(zspec>0.95 & zspec<1.05)|(zspec>0.15 & zspec<0.25)) & RA>%0.2f & RA<%0.2f & DEC>%0.2f & DEC<%0.2f & NUV>0 & NUV<%0.1f'%(alpha_centre-0.33,alpha_centre+0.33,delta_centre-0.15,delta_centre+0.15,mag_NUV_max))
# substars = stars.query('ra>%0.2f & ra<%0.2f & dec>%0.2f & dec<%0.2f'%(alpha_centre-0.3,alpha_centre+0.3,delta_centre-0.3,delta_centre+0.15))
# fig, trace1, mask = ScatterPlot(subvipers,x='RA',y='DEC',L=['Type','id_IAU_1','zspec','FUV','NUV','line_coord_sky'],url='url',size='size',name='Galaxies',add_line=True,center=[alpha_centre,delta_centre])
# fig, trace2, _ = ScatterPlot(substars,fig=fig,x='ra',y='dec',L=['r','g'],url='url',size='size',color='.',name='Guiding stars',center=[alpha_centre,delta_centre])
# fig, trace3, _ = ScatterPlot(qso,fig=fig,x='ra',y='dec',L=['FLUX_u'],url=None,size='size',color='.',name='QSOs',center=[alpha_centre,delta_centre])
# fig.add_trace(go.Histogram(x=subvipers[mask]['NUV'],xaxis='x2',yaxis='y2', marker_color='black',opacity=0.5,name='NUV (detector: %i)'%(len(subvipers[mask]))))
# fig.add_trace(go.Histogram(x=subvipers['NUV'],xaxis='x2',yaxis='y2', marker_color='grey',opacity=0.5,name='NUV (All: %i)'%(len(subvipers))))
# fig.update_layout(barmode='stack')
# iplot(plot_det_shape(fig,alpha_centre,delta_centre,title="Propositon #1"))
# alpha_centre = 37.6
# delta_centre = -5.6
# subvipers = vipers.query('((zspec>0.636 & zspec<0.6838)| (zspec>0.69613 & zspec<0.751)|(zspec>1.25 & zspec<1.45)|(zspec>0.95 & zspec<1.05)|(zspec>0.15 & zspec<0.25)) & RA>%0.2f & RA<%0.2f & DEC>%0.2f & DEC<%0.2f & NUV>0 & NUV<%0.1f'%(alpha_centre-0.33,alpha_centre+0.33,delta_centre-0.15,delta_centre+0.15,mag_NUV_max))
# substars = stars.query('ra>%0.2f & ra<%0.2f & dec>%0.2f & dec<%0.2f'%(alpha_centre-0.3,alpha_centre+0.3,delta_centre-0.3,delta_centre+0.15))
# fig, trace1, mask = ScatterPlot(subvipers,x='RA',y='DEC',L=['Type','id_IAU_1','zspec','FUV','NUV','line_coord_sky'],url='url',size='size',name='Galaxies',add_line=True,center=[alpha_centre,delta_centre])
# fig, trace2, _ = ScatterPlot(substars,fig=fig,x='ra',y='dec',L=['r','g'],url='url',size='size',color='.',name='Guiding stars',center=[alpha_centre,delta_centre])
# fig, trace3, _ = ScatterPlot(qso,fig=fig,x='ra',y='dec',L=['FLUX_u'],url=None,size='size',color='.',name='QSOs',center=[alpha_centre,delta_centre])
# fig.add_trace(go.Histogram(x=subvipers[mask]['NUV'],xaxis='x2',yaxis='y2', marker_color='black',opacity=0.5,name='NUV (detector: %i)'%(len(subvipers[mask]))))
# fig.add_trace(go.Histogram(x=subvipers['NUV'],xaxis='x2',yaxis='y2', marker_color='grey',opacity=0.5,name='NUV (All: %i)'%(len(subvipers))))
# fig.update_layout(barmode='stack')
# iplot(plot_det_shape(fig,alpha_centre,delta_centre,title="Propositon #2"))